/*

TIPO PRODUCO DAO
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Logistica.DAO;


import com.dp1.pucp.Modelo.Clases.*;
import com.dp1.pucp.Util.HibernateUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author ubuntu64
 */
public class TipoProductoDAO {
    
    
    
    public Almacen getAlmacen(String tipo){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            Almacen c = new Almacen();      
            List lista = session.createQuery("from Almacen where tipo='"+tipo+"'").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) { 
                c = (Almacen) iter.next();
            }        
            tx.commit();
            return c;
        }catch(HibernateException e){
            throw new HibernateException(e);
        }finally{
            session.close();
        }
    }
    
    
    public void guardarMP (Materiaprima mp){
     Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(mp);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarSimulacion (Simulacion simu){
     Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(simu);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
      public void guardarPF (Productofinal pf){
     Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(pf);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public Presentacion getPresentacion (int cod){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            
             Presentacion c = new Presentacion();      
            List lista = session.createQuery("from Presentacion where idpresentacion="+cod).list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) { 
                c = (Presentacion) iter.next();
                               
            }        
            tx.commit();
           
            return c;
        }catch(HibernateException e){
            throw new HibernateException(e);
        }finally{
            session.close();
        }
    }

    public Lineapedidocompra sacarUltLineaPedido()
    {
        int cont=0;
        ArrayList<Lineapedidocompra> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Lineapedidocompra order by idlineapedidocompra").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Lineapedidocompra p = (Lineapedidocompra) iter.next();
                Hibernate.initialize(p.getCosto());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdlineapedidocompra());
                Hibernate.initialize(p.getPedidocompra());
                Hibernate.initialize(p.getProveedor());
                Hibernate.initialize(p.getTipoproducto());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Lineapedidocompra LineaPedNuevo=new Lineapedidocompra();

                return LineaPedNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    public Pedidoproduccion sacarUltPedidoProduccion()
    {
        int cont=0;
        ArrayList<Pedidoproduccion> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Pedidoproduccion order by idpedidoproduccion").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Pedidoproduccion p = (Pedidoproduccion) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCantidadCubierta());
                Hibernate.initialize(p.getFecha());
                Hibernate.initialize(p.getIdpedidoproduccion());
                Hibernate.initialize(p.getSimulacion());
                Hibernate.initialize(p.getTrabajos());
                Hibernate.initialize(p.getTurno());
                Hibernate.initialize(p.getTipoproducto());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Pedidoproduccion PedProduccionNuevo=new Pedidoproduccion();

                return PedProduccionNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    
    public Pedidocompra sacarUltPedido()
    {
        int cont=0;
        ArrayList<Pedidocompra> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Pedidocompra order by idpedidocompra").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Pedidocompra p = (Pedidocompra) iter.next();
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechasolicitud());
                Hibernate.initialize(p.getIdpedidocompra());
                Hibernate.initialize(p.getLineapedidocompras());
                Hibernate.initialize(p.getMotivo());
                Hibernate.initialize(p.getOrdencompras());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Pedidocompra PedNuevo=new Pedidocompra();

                return PedNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    public RecetaPfMp sacarUltRecetaPfMp()
    {
        int cont=0;
        ArrayList<RecetaPfMp> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from RecetaPfMp order by idreceta_pf_mp").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                RecetaPfMp RecetaPfMpNuevo=new RecetaPfMp();

                return RecetaPfMpNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    public Kardex sacarPenultimoKardex()
    {
        int cont=0;
        ArrayList<Kardex> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Kardex order by idkardex").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Kardex p = (Kardex) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFecha());
                Hibernate.initialize(p.getEntradasalida());
                Hibernate.initialize(p.getHora());
                Hibernate.initialize(p.getIdkardex());
                Hibernate.initialize(p.getMotivo());
                Hibernate.initialize(p.getTipo());
                Hibernate.initialize(p.getTipoproducto());
                
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0 ||cont ==1){
                Kardex KardexNuevo=new Kardex();

                return KardexNuevo;
            }
            else{
                return (listaResultados.get(cont-2));
            }    
        }           
    }
    
    public Kardex sacarUltimoKardex()
    {
        int cont=0;
        ArrayList<Kardex> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Kardex order by idkardex").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Kardex p = (Kardex) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFecha());
                Hibernate.initialize(p.getEntradasalida());
                Hibernate.initialize(p.getHora());
                Hibernate.initialize(p.getIdkardex());
                Hibernate.initialize(p.getMotivo());
                Hibernate.initialize(p.getTipo());
                Hibernate.initialize(p.getTipoproducto());
                
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Kardex KardexNuevo=new Kardex();

                return KardexNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    
    public RecetaPfMp sacarRecetaEliminar(RecetaPfMp u)
    {
        int cont=0;
        ArrayList<RecetaPfMp> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from RecetaPfMp where idreceta_pf_mp="+u.getIdrecetaPfMp()+"").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                RecetaPfMp RecetaPfMpNuevo=new RecetaPfMp();

                return RecetaPfMpNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    public Productofinal sacaListaAjusteAlmacen(Integer idAlmacen,Integer idPresentacion,Integer idTipoProducto)
    {
        int cont=0;
        ArrayList<Productofinal> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Productofinal where idpresentacion="+idPresentacion+"and idtipoproducto="+idTipoProducto+"and idalmacen="+idAlmacen+"and estado='1'").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Productofinal p = (Productofinal) iter.next();
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaCaducidad());
                Hibernate.initialize(p.getIdproductofinal());
                Hibernate.initialize(p.getLote());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Productofinal ProductoFinalNuevo=new Productofinal();
                return ProductoFinalNuevo;
            }
            else{
                return (listaResultados.get(0));
            }    
        }           
    }
    
    public Materiaprima sacaListaAjusteMateriaPrimaAlmacen(Integer idAlmacen,Integer idTipoProducto)
    {
        int cont=0;
        ArrayList<Materiaprima> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Materiaprima where idtipoproducto="+idTipoProducto+"and idalmacen="+idAlmacen+"and estado='1'").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Materiaprima p = (Materiaprima) iter.next();
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaCaducidad());
                Hibernate.initialize(p.getIdmateriaprima());
                Hibernate.initialize(p.getLote());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getVolumen());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Materiaprima MateriaPrimaNuevo=new Materiaprima();
                return MateriaPrimaNuevo;
            }
            else{
                return (listaResultados.get(0));
            }    
        }           
    }
    
    public Lineapedidocompra sacarLineaPedidoEliminar(Lineapedidocompra u)
    {
        int cont=0;
        ArrayList<Lineapedidocompra> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Lineapedidocompra where idlineapedidocompra="+u.getIdlineapedidocompra()+"").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Lineapedidocompra p = (Lineapedidocompra) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCosto());
                Hibernate.initialize(p.getIdlineapedidocompra());
                Hibernate.initialize(p.getPedidocompra());
                Hibernate.initialize(p.getProveedor());
                Hibernate.initialize(p.getTipoproducto());
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Lineapedidocompra LineaPedidoNuevo=new Lineapedidocompra();

                return LineaPedidoNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    }
    
    
    public void guardarTipoProducto(Tipoproducto tipoproducto){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(tipoproducto);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarPedidoProducto(Pedidoproducto pedidoproducto){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(pedidoproducto);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void eliminarReceta(RecetaPfMp lineaReceta){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            RecetaPfMp recetaEliminar=sacarRecetaEliminar(lineaReceta);
            if(recetaEliminar.getIdrecetaPfMp()==0){ 
            }
            else{
            session.delete(lineaReceta);
            }
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void eliminarLineaPedido(Lineapedidocompra lineapedidocompra){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            Lineapedidocompra lineaPedidoEliminar=sacarLineaPedidoEliminar(lineapedidocompra);
            if(lineaPedidoEliminar.getIdlineapedidocompra()==0){ 
            }
            else{
            session.delete(lineapedidocompra);
            }
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarLineaPedido(Lineapedidocompra lineapedido){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            Lineapedidocompra ultPedido=sacarUltLineaPedido();
            if (ultPedido.getIdlineapedidocompra()==0) 
                session.saveOrUpdate(lineapedido);  

            else if((ultPedido.getPedidocompra().getIdpedidocompra()!=lineapedido.getPedidocompra().getIdpedidocompra())){
                 session.saveOrUpdate(lineapedido);    
       
            }
            else{
               if((ultPedido.getTipoproducto().getIdtipoproducto()!=lineapedido.getTipoproducto().getIdtipoproducto())){
                 session.saveOrUpdate(lineapedido); 
               }
            }
            tx.commit();
            
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
     }        
    }
    
    public void guardarAlmacen(Almacen almacen){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(almacen);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarProductoFinal(Productofinal productoFinal){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(productoFinal);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarAjuste(Kardex kardex){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(kardex);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarPedido(Pedidocompra pedido){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            
            Pedidocompra ultPedido=sacarUltPedido();
            if (ultPedido.getIdpedidocompra()==0) 
                session.saveOrUpdate(pedido);  

            else if((ultPedido.getCodigo()!=pedido.getCodigo())){
                 session.saveOrUpdate(pedido);    
       
            }
            else{
               if((ultPedido.getCodigo()!=pedido.getCodigo())){
                 session.saveOrUpdate(pedido); 
               }
            }
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public void guardarRecetaPfMp(RecetaPfMp recetapfmp){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {

            int seEncontro=buscarIncidencia(recetapfmp);
            
            //si se encontro no se permite grabar
            if(seEncontro==1){
            
            }
            else{
                session.saveOrUpdate(recetapfmp);
            }   
             
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public ArrayList<String> listarTipo() {
        ArrayList<String> tipos = new ArrayList<>();
        tipos.add("Seleccionar");
        tipos.add("Materia Prima");
        tipos.add("Producto Intermedio");
        tipos.add("Producto Final");
        return tipos;
    }
    
    public ArrayList<String> listarAlmacen() {
        ArrayList<String> tipos = new ArrayList<>();
        //tipos.add("Seleccionar");
        tipos.add("Charlie Inicial");
        tipos.add("Charlie en el medio");
        tipos.add("Charlie Final");
        return tipos;
    }
    
    public ArrayList<String> listarTipoAlmacen() {
        ArrayList<String> tipos = new ArrayList<>();
        //tipos.add("Seleccionar");
        tipos.add("Materia Prima");
        tipos.add("Producto Intermedio");
        tipos.add("Producto Final");
        return tipos;
    }
    
    public ArrayList<String> listarTipoProducto() {
        ArrayList<String> tipos = new ArrayList<>();
        tipos.add("Seleccionar");
        tipos.add("Materia Prima");
        tipos.add("Producto Intermedio");
        tipos.add("Producto Final");
        return tipos;
    }
    
    public ArrayList<String> listarTurno() {
        ArrayList<String> tipos = new ArrayList<>();
        tipos.add("Seleccionar");
        tipos.add("Mañana");
        tipos.add("Tarde");
        tipos.add("Noche");
        return tipos;
    }
    
    public ArrayList<String> listarTurnoAlterno() {
        ArrayList<String> tipos = new ArrayList<>();
        //tipos.add("Seleccionar");
        tipos.add("Mañana");
        tipos.add("Tarde");
        tipos.add("Noche");
        return tipos;
    }
    
    public ArrayList<String> listarUnidades() {
        ArrayList<String> tipos = new ArrayList<>();
        //tipos.add("Gramos");
        tipos.add("Kilogramos");
        tipos.add("Litros");
        tipos.add("Unidades");
        
        return tipos;
    }
    
    public ArrayList<String> listarMotivoAjuste() {
        ArrayList<String> tipos = new ArrayList<>();
        tipos.add("Seleccionar");
        tipos.add("Rotura");
        tipos.add("Defecto");
        tipos.add("Reingreso");
        tipos.add("Ingreso por compra a proveedor");
        return tipos;
    }
    
    
    public ArrayList<String> listarMotivoA() {
        ArrayList<String> tipos = new ArrayList<>();
        //tipos.add("Seleccionar");
        tipos.add("Rotura");
        tipos.add("Defecto");
        tipos.add("Reingreso");
        return tipos;
    }
    
    
    
    public ArrayList<String> listarMotivo() {
        ArrayList<String> tipos = new ArrayList<>();
        tipos.add("Seleccionar");
        tipos.add("Pedido Cliente");
        tipos.add("Politicas");

        return tipos;
    }
    
    public ArrayList<String> listarMotivoPedidoCompra() {
        ArrayList<String> tipos = new ArrayList<>();
        //tipos.add("Seleccionar");
        tipos.add("Pedido Cliente");
        tipos.add("Politicas");

        return tipos;
    }
    
    public ArrayList<String> listarEstadoPedidoCompra() {
        ArrayList<String> tipos = new ArrayList<>();
        tipos.add("Seleccionar");
        tipos.add("Eliminado");
        tipos.add("Registrado");
        tipos.add("En compra");
        tipos.add("Finalizado");
        
        return tipos;
    }
    
    public ArrayList<Tipoproducto> listarTipoProducto(Integer tipo,String nombre)
    {
        ArrayList<Tipoproducto> listaResultados = new ArrayList<>();   
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{

         if (tipo==0){ //busca todos los estados    
                if(nombre.equals("")){
                  lista = session.createQuery("from Tipoproducto order by idtipoproducto").list();        
                    
                }
                else{
                    lista = session.createQuery("from Tipoproducto where nombre upper like '%"+nombre+"%'order by idtipoproducto").list();
                }
        }else{// segun estado

            if(nombre.equals("")){
                if(tipo==1)
                lista = session.createQuery("from Tipoproducto where tipo ='MP'").list(); 
                if(tipo==2)
                lista = session.createQuery("from Tipoproducto where tipo ='PI'").list(); 
                if(tipo==3)
                lista = session.createQuery("from Tipoproducto where tipo ='PF'").list();   
            }
            else{
                if(tipo==1)
                lista = session.createQuery("from Tipoproducto where tipo ='MP' and nombre like '%"+nombre+"%' ").list(); 
                if(tipo==2)
                lista = session.createQuery("from Tipoproducto where tipo ='PI' and nombre like '%"+nombre+"%' ").list(); 
                if(tipo==3)
                lista = session.createQuery("from Tipoproducto where tipo ='PF' and nombre like '%"+nombre+"%' admin").list();

            }
        }       
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Tipoproducto p = (Tipoproducto) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getIdtipoproducto());
                Hibernate.initialize(p.getMaxPolitica());
                Hibernate.initialize(p.getMinPolitica());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFactorVol());
                Hibernate.initialize(p.getUnidades());
                Hibernate.initialize(p.getTipo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        } 
    }
    
    
    public ArrayList<Tipoproducto> listarTipoProducto(Integer idTipoProducto)
    {
        ArrayList<Tipoproducto> listaResultados = new ArrayList<>();   
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{
            
                  lista = session.createQuery("from Tipoproducto where idtipoproducto="+idTipoProducto+"").list();        
      
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Tipoproducto p = (Tipoproducto) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getIdtipoproducto());
                Hibernate.initialize(p.getMaxPolitica());
                Hibernate.initialize(p.getMinPolitica());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFactorVol());
                Hibernate.initialize(p.getUnidades());
                Hibernate.initialize(p.getTipo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        } 
    }
    
    public int buscarIncidencia(RecetaPfMp recetaPfMp)
    {
        ArrayList<RecetaPfMp> listaResultados = new ArrayList<>();   
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{
            
                  lista = session.createQuery("from RecetaPfMp where idtipoproducto_pf="+recetaPfMp.getTipoproductoByIdtipoproductoPf().getIdtipoproducto()+"and idtipoproducto_mp="+recetaPfMp.getTipoproductoByIdtipoproductoMp().getIdtipoproducto()+"").list();        
      
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            if(listaResultados.isEmpty()){
                return 0;
            }
            else{
            return 1;
            }
        } 
    }
    
    public ArrayList<Almacen> listarAlmacen2(String tipo)
    {
        ArrayList<Almacen> listaResultados = new ArrayList<>();   
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{
            
                  if(tipo.equals("Seleccionar")){
                  lista = session.createQuery("from Almacen order by idalmacen").list();        
                  }
                  if(tipo.equals("MP")){
                  lista = session.createQuery("from Almacen where tipo='MP'").list();        
                  }
                  if(tipo.equals("PI")){
                  lista = session.createQuery("from Almacen where tipo='PI'").list();        
                  }
                  if(tipo.equals("PF")){
                  lista = session.createQuery("from Almacen where tipo='PF'").list();        
                  }
                  
                  
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Almacen p = (Almacen) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEspacioLibre());
                Hibernate.initialize(p.getEspacioTotal());
                Hibernate.initialize(p.getEspacioUtilizado());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getIdalmacen());
                Hibernate.initialize(p.getMateriaprimas());
                Hibernate.initialize(p.getTipo());
                Hibernate.initialize(p.getProductofinals());
                Hibernate.initialize(p.getProductointermedios());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        } 
    }
    
    
    public ArrayList<Demanda> listarDemanda(Integer idsimulacion)
    {
        ArrayList<Demanda> listaResultados = new ArrayList<>();   
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{
            
                  lista = session.createQuery("from Demanda where idsimulacion="+idsimulacion+"").list();        
      
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Demanda p = (Demanda) iter.next();
                Hibernate.initialize(p.getCantPedDec());
                Hibernate.initialize(p.getCantPedNormal());
                Hibernate.initialize(p.getCantPedRell());
                Hibernate.initialize(p.getCrealNormal());
                Hibernate.initialize(p.getCrealPed());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getCrealRell());
                Hibernate.initialize(p.getDemandaxpedidoproductos());
                Hibernate.initialize(p.getFecha());
                Hibernate.initialize(p.getFechaCubierta());
                Hibernate.initialize(p.getIddemanda());
                Hibernate.initialize(p.getSimulacion());
                Hibernate.initialize(p.getTurno());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        } 
    }
    
    public ArrayList<Productofinal> listarAlmacenPF()
    {
        ArrayList<Productofinal> listaResultados = new ArrayList<>();   
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{
            
                  lista = session.createQuery("from Productofinal order by idproductofinal").list();        
       
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Productofinal p = (Productofinal) iter.next();
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaCaducidad());
                Hibernate.initialize(p.getIdproductofinal());
                Hibernate.initialize(p.getLote());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipoproducto());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        } 
    }

    public ArrayList<Tipoproducto> listarGenerarTipoProducto(Integer cod)
    {
        ArrayList<Tipoproducto> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Tipoproducto where idtipoproducto="+cod+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Tipoproducto p = (Tipoproducto) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getIdtipoproducto());
                Hibernate.initialize(p.getMaxPolitica());
                Hibernate.initialize(p.getMinPolitica());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFactorVol());
                Hibernate.initialize(p.getUnidades());
                Hibernate.initialize(p.getTipo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Materiaprima> listarMateriaPrima(Integer IdTipoProducto)
    {
        ArrayList<Materiaprima> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Materiaprima where idtipoproducto="+IdTipoProducto+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Materiaprima p = (Materiaprima) iter.next();
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaCaducidad());
                Hibernate.initialize(p.getIdmateriaprima());
                Hibernate.initialize(p.getLote());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getVolumen());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Pedidoproduccion> listarPedidoProduccion(int turno)
    {
        ArrayList<Pedidoproduccion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        List lista=null;
        try{
            
            if(turno==0){
              lista=session.createQuery("from Pedidoproduccion order by idpedidoproduccion").list();          
                
            }
            
            else{
              lista=session.createQuery("from Pedidoproduccion where turno="+turno+"").list();        
            }
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Pedidoproduccion p = (Pedidoproduccion) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCantidadCubierta());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFecha());
                Hibernate.initialize(p.getIdpedidoproduccion());
                Hibernate.initialize(p.getSimulacion());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getTrabajos());
                Hibernate.initialize(p.getTurno());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
     public ArrayList<Productosimulacion> listarProductoSimulacion(Integer cod,Tipoproducto producto)
    {
        ArrayList<Productosimulacion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Productosimulacion where idsimulacion="+cod+"and idtipoproducto="+producto.getIdtipoproducto()+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Productosimulacion p = (Productosimulacion) iter.next();
                Hibernate.initialize(p.getCantMerma());
                Hibernate.initialize(p.getCantProducida());
                Hibernate.initialize(p.getIdproductosimulacion());
                Hibernate.initialize(p.getSimulacion());
                Hibernate.initialize(p.getTipoproducto());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Simulacion> listarSimulacion()
    {
        ArrayList<Simulacion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            
            //estado 9 es LLEGO MATERIA PRIMA
            List lista = session.createQuery("from Simulacion where estado='9' order by idsimulacion").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Simulacion p = (Simulacion) iter.next();
                Hibernate.initialize(p.getCantdecorada());
                Hibernate.initialize(p.getCantnormal());
                Hibernate.initialize(p.getCantrellena());
                Hibernate.initialize(p.getEmpleadoxmaquinasimulacions());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaHora());
                Hibernate.initialize(p.getIdsimulacion());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getParametrosalgoritmo());
                Hibernate.initialize(p.getPedidoproduccions());
                Hibernate.initialize(p.getProductosimulacions());
                Hibernate.initialize(p.getProduccion());
                Hibernate.initialize(p.getTurno());
                Hibernate.initialize(p.getTrabajos());
                
                Hibernate.initialize(p.getDemandas());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Simulacion> listarSimulacion(int idSimulacion)
    {
        ArrayList<Simulacion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Simulacion where estado='9' and idsimulacion="+idSimulacion+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Simulacion p = (Simulacion) iter.next();
                Hibernate.initialize(p.getCantdecorada());
                Hibernate.initialize(p.getCantnormal());
                Hibernate.initialize(p.getCantrellena());
                Hibernate.initialize(p.getEmpleadoxmaquinasimulacions());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaHora());
                Hibernate.initialize(p.getIdsimulacion());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getParametrosalgoritmo());
                Hibernate.initialize(p.getPedidoproduccions());
                Hibernate.initialize(p.getProductosimulacions());
                Hibernate.initialize(p.getProduccion());
                Hibernate.initialize(p.getTurno());
                Hibernate.initialize(p.getTrabajos());
                Hibernate.initialize(p.getDemandas());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Tipoproducto> listarTipoProductoFinal()
    {
        ArrayList<Tipoproducto> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Tipoproducto where tipo='PF' order by Idtipoproducto").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Tipoproducto p = (Tipoproducto) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getIdtipoproducto());
                Hibernate.initialize(p.getMaxPolitica());
                Hibernate.initialize(p.getMinPolitica());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFactorVol());
                Hibernate.initialize(p.getUnidades());
                Hibernate.initialize(p.getTipo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
     public ArrayList<Materiaprima> listarAlmacenMP()
    {
        ArrayList<Materiaprima> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Materiaprima order by Idmateriaprima").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Materiaprima p = (Materiaprima) iter.next();
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaCaducidad());
                Hibernate.initialize(p.getIdmateriaprima());
                Hibernate.initialize(p.getLote());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getVolumen());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Lineapedidocompra> llenarDetallePedido(Pedidocompra u)
    {
        ArrayList<Lineapedidocompra> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Lineapedidocompra where idpedidocompra="+u.getIdpedidocompra()+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Lineapedidocompra p = (Lineapedidocompra) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCosto());
                Hibernate.initialize(p.getIdlineapedidocompra());
                Hibernate.initialize(p.getLineaordencompras());
                Hibernate.initialize(p.getMoneda());
                Hibernate.initialize(p.getPedidocompra());
                Hibernate.initialize(p.getProveedor());
                Hibernate.initialize(p.getSubtotal());
                Hibernate.initialize(p.getTipoproducto());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<RecetaPfMp> llenarRecetaProducto(Tipoproducto u)
    {
        ArrayList<RecetaPfMp> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from RecetaPfMp where idtipoproducto_pf="+u.getIdtipoproducto()+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Lineapedidocompra> listarLinea(Integer cod)
    {
        ArrayList<Lineapedidocompra> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{     
            List lista = session.createQuery("from Lineapedidocompra where idpedidocompra="+cod+"").list();
            
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Lineapedidocompra p = (Lineapedidocompra) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCosto());
                Hibernate.initialize(p.getIdlineapedidocompra());
                Hibernate.initialize(p.getProveedor());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getPedidocompra());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    
    public Pedidocompra sacarUltCodPedido()
    {
        int cont=0;
        ArrayList<Pedidocompra> listaResultados = new ArrayList<>();       

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Pedidocompra order by idpedidocompra").list();        
            Iterator iter = lista.iterator();
            
            while (iter.hasNext()) {    
                Pedidocompra p = (Pedidocompra) iter.next();
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechasolicitud());
                Hibernate.initialize(p.getIdpedidocompra());
                Hibernate.initialize(p.getMotivo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getOrdencompras());
                Hibernate.initialize(p.getLineapedidocompras());
                Hibernate.initialize(p.getNumordcomprafinalizadas());
                Hibernate.initialize(p.getNumordcompratotal());
                Hibernate.initialize(p.getSimulacions());
                
                cont=cont+1;
                listaResultados.add(p); 
            }
            tx.commit();
            
            } catch(HibernateException e) {
            throw new HibernateException(e);  
        }finally {
            session.close();
            if (cont==0){
                Pedidocompra pedNuevo=new Pedidocompra();
                //pedNuevo.setCodigo("PED00000001");
      
                return pedNuevo;
            }
            else{
                return (listaResultados.get(cont-1));
            }    
        }           
    } 
    
    public ArrayList<Pedidocompra> listarPedidoCompra(String Motivo,int Estado)
    {
        ArrayList<Pedidocompra> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        List lista=null;
        try{
            
            if(Motivo.equals("Seleccionar") || Estado==0){
                  lista = session.createQuery("from Pedidocompra order by idpedidocompra").list();      
            }
            else{
                lista = session.createQuery("from Pedidocompra where motivo like '%"+Motivo+"%' and estado="+Estado+"").list();      
            }
            
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Pedidocompra p = (Pedidocompra) iter.next();
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechasolicitud());
                Hibernate.initialize(p.getIdpedidocompra());
                Hibernate.initialize(p.getLineapedidocompras());
                Hibernate.initialize(p.getMotivo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
     public ArrayList<Pedidoproducto> listarPedidoProducto()
    {
        ArrayList<Pedidoproducto> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Pedidoproducto where estado in (1,2) order by idpedidoproducto").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Pedidoproducto p = (Pedidoproducto) iter.next();
                Hibernate.initialize(p.getCliente());
                Hibernate.initialize(p.getDocumentoventas());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaEntrega());
                Hibernate.initialize(p.getFechaRegistro());
                Hibernate.initialize(p.getIdpedidoproducto());
                Hibernate.initialize(p.getOrdensalidaprods());
                Hibernate.initialize(p.getTotal());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Almacen> listarAlmacenes()
    {
        ArrayList<Almacen> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Almacen order by Idalmacen").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Almacen p = (Almacen) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEspacioLibre());
                Hibernate.initialize(p.getEspacioTotal());
                Hibernate.initialize(p.getEspacioUtilizado());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getTipo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    

    
     public ArrayList<Productofinal> listarProductoFinales()
    {
        ArrayList<Productofinal> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Productofinal order by Idproductofinal").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Productofinal p = (Productofinal) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCodigo());
                Hibernate.initialize(p.getFechaCaducidad());
                Hibernate.initialize(p.getEstado());
                //Hibernate.initialize(p.getKardexes());
                Hibernate.initialize(p.getLote());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipoproducto());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public void guardarPedidoProduccion(Pedidoproduccion pedidoproduccion){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            
            Pedidoproduccion ultPedido=sacarUltPedidoProduccion();
            if (ultPedido.getIdpedidoproduccion()==0) 
                session.saveOrUpdate(pedidoproduccion);  

            else if((pedidoproduccion.getSimulacion()!=null)){
                 session.saveOrUpdate(pedidoproduccion);    
       
            }
            else{
               if((pedidoproduccion.getSimulacion()!=null)){
                 session.saveOrUpdate(pedidoproduccion); 
               }
            }
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public ArrayList<Pedidoproducto> listarPedidoProducto(Date fechaini,Date fechafin)
    {
        ArrayList<Pedidoproducto> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Pedidoproducto where estado in (1,2) and fecha_entrega between '" +fechaini + "' and '" +fechafin + "' order by idpedidoproducto").list();        
 
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Pedidoproducto p = (Pedidoproducto) iter.next();
                Hibernate.initialize(p.getCliente());
                Hibernate.initialize(p.getDocumentoventas());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getFechaEntrega());
                Hibernate.initialize(p.getFechaRegistro());
                Hibernate.initialize(p.getIdpedidoproducto());
                Hibernate.initialize(p.getOrdensalidaprods());
                Hibernate.initialize(p.getTotal());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
     
     
    public ArrayList<Kardex> listarKardex(String motivo)
    {
        ArrayList<Kardex> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         List lista=null;
        try{
            if(motivo.equals("Seleccionar")){
                lista = session.createQuery("from Kardex order by idkardex").list();
            }
            else{
                lista=session.createQuery("from Kardex where motivo like '%"+motivo+"%' order by idkardex").list(); 
            }
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Kardex p = (Kardex) iter.next();
                Hibernate.initialize(p.getAlmacen());
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getEntradasalida());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getHora());
                Hibernate.initialize(p.getFecha());
                Hibernate.initialize(p.getIdkardex());
                Hibernate.initialize(p.getMotivo());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getTipo());

                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<RecetaPfMp> listarReceta(Integer IdTipoProductoPF )
    {
        ArrayList<RecetaPfMp> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
          
            List lista = session.createQuery("from RecetaPfMp where idtipoproducto_pf="+ IdTipoProductoPF +"").list();

            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Lineapedidocompra> listarLineaPedido(Integer IdPedido )
    {
        ArrayList<Lineapedidocompra> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            
            List lista = session.createQuery("from Lineapedidocompra where idpedidocompra="+IdPedido+"").list();

            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Lineapedidocompra p = (Lineapedidocompra) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getCosto());
                Hibernate.initialize(p.getIdlineapedidocompra());
                Hibernate.initialize(p.getPedidocompra());
                Hibernate.initialize(p.getProveedor());
                Hibernate.initialize(p.getTipoproducto());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Lineapedidoproducto> listarLineaPedidoProducto(Integer IdPedidoProducto )
    {
        ArrayList<Lineapedidoproducto> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            
            List lista = session.createQuery("from Lineapedidoproducto where idpedidoproducto="+IdPedidoProducto+"").list();

            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Lineapedidoproducto p = (Lineapedidoproducto) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdlineapedidoproducto());
                Hibernate.initialize(p.getPUnitario());
                Hibernate.initialize(p.getTipoproducto());
                Hibernate.initialize(p.getPedidoproducto());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getSubtotal());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
     public ArrayList<RecetaPfMp> listarMpPf(Integer IdTipoProductoPF )
    {
        ArrayList<RecetaPfMp> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from TipoProducto where tipo='MP' and idtipoproducto_pf="+ IdTipoProductoPF +"order by Idreceta_pf_mp").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Tipoproducto> listarMateriaPrima()
    {
        ArrayList<Tipoproducto> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Tipoproducto where tipo='MP' and estado='1' order by idtipoproducto").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Tipoproducto p = (Tipoproducto) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getIdtipoproducto());
                Hibernate.initialize(p.getMaxPolitica());
                Hibernate.initialize(p.getMinPolitica());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getTipo());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Presentacion> listarPresentacion()
    {
        ArrayList<Presentacion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Presentacion where estado='1' order by idpresentacion").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Presentacion p = (Presentacion) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getVolumen());
                Hibernate.initialize(p.getNombre());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Presentacion> listarPresent(int codPres)
    {
        ArrayList<Presentacion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Presentacion where idpresentacion="+codPres+"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Presentacion p = (Presentacion) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getVolumen());
                Hibernate.initialize(p.getNombre());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
    
    public ArrayList<Tipomerma> listarTipomermas(){
        ArrayList<Tipomerma> mermas = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Tipomerma order by idtipomerma").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Tipomerma d = (Tipomerma) iter.next();
                Hibernate.initialize(d.getIdtipomerma());
                Hibernate.initialize(d.getNombre());
                Hibernate.initialize(d.getDescripcion());
                Hibernate.initialize(d.getRecetaPfMps());
                Hibernate.initialize(d.getTrabajos());
                mermas.add(d);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return mermas;
        }     
    }
    
    
    
        public ArrayList<RecetaPfPi> listarRecetaPi(Integer IdTipoProductoPF )
    {
        ArrayList<RecetaPfPi> listaResultados = new ArrayList<>();       
            Session session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Receta_Pf_Pi where idtipoproducto_pf="+ IdTipoProductoPF +"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                RecetaPfPi p = (RecetaPfPi) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfPi());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPi());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }   
   
         
    }
        
    public Tipoproducto buscarTipoProducto(int idtipo){
        Tipoproducto tipo = new Tipoproducto();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
             List lista = session.createQuery("from Tipoproducto where idtipoproducto="+ idtipo +"").list();        
            Iterator iter = lista.iterator();
             if (iter.hasNext()) {   
                tipo = (Tipoproducto) iter.next();
                Hibernate.initialize(tipo.getIdtipoproducto());          
                Hibernate.initialize(tipo.getNombre());             
                Hibernate.initialize(tipo.getDescripcion());
                Hibernate.initialize(tipo.getTipo());
                Hibernate.initialize(tipo.getMaxPolitica());
                Hibernate.initialize(tipo.getMinPolitica());
                Hibernate.initialize(tipo.getEstado());
                Hibernate.initialize(tipo.getFactorVol());
                
            }        
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return tipo;
        }         
    }
    
     public Tipoproducto buscarTipoProducto2(Tipoproducto tiipo){
        Tipoproducto tipo = new Tipoproducto();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
             List lista = session.createQuery("from Tipoproducto where idtipoproducto="+ tiipo.getIdtipoproducto() +"").list();        
            Iterator iter = lista.iterator();
             if (iter.hasNext()) {   
                tipo = (Tipoproducto) iter.next();
                Hibernate.initialize(tipo.getIdtipoproducto());          
                Hibernate.initialize(tipo.getNombre());             
                Hibernate.initialize(tipo.getDescripcion());
                Hibernate.initialize(tipo.getTipo());
                Hibernate.initialize(tipo.getMaxPolitica());
                Hibernate.initialize(tipo.getMinPolitica());
                Hibernate.initialize(tipo.getEstado());
                Hibernate.initialize(tipo.getFactorVol());
                
            }        
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return tipo;
        }         
    }
    
    public ArrayList<RecetaPfMp> getRecetaByProd(int id){
        ArrayList<RecetaPfMp> listare = new ArrayList();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
         try{
            List lista = session.createQuery("from RecetaPfMp where idtipoproducto_pf="+ id +"").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                RecetaPfMp p = (RecetaPfMp) iter.next();
                Hibernate.initialize(p.getCantidad());
                Hibernate.initialize(p.getIdrecetaPfMp());
                Hibernate.initialize(p.getMerma());
                Hibernate.initialize(p.getPresentacion());
                Hibernate.initialize(p.getTipomerma());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoMp());
                Hibernate.initialize(p.getTipoproductoByIdtipoproductoPf());
                
                listare.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listare;
        }   
    
    }
    
   public Materiaprima  getMateriaPrima(int id){
        Materiaprima matprim = new Materiaprima();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
             List lista = session.createQuery("from Materiaprima where idtipoproducto=" +id+ "").list();        
            Iterator iter = lista.iterator();
             if (iter.hasNext()) {   
                matprim = (Materiaprima)iter.next();
                Hibernate.initialize(matprim.getAlmacen());          
                Hibernate.initialize(matprim.getCantidad());             
                Hibernate.initialize(matprim.getCodigo());
                Hibernate.initialize(matprim.getEstado());
                Hibernate.initialize(matprim.getFechaCaducidad());
                Hibernate.initialize(matprim.getIdmateriaprima());
                Hibernate.initialize(matprim.getLote());
                Hibernate.initialize(matprim.getTipoproducto());
                Hibernate.initialize(matprim.getVolumen());
                
            }        
            tx.commit(); 
            
        }catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return matprim;
        }
    }
   
   public ArrayList<Presentacion> getPresentaciones()
    {
        ArrayList<Presentacion> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Presentacion order by idpresentacion").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                Presentacion p = (Presentacion) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getEstado());
                Hibernate.initialize(p.getVolumen());
                Hibernate.initialize(p.getNombre());
                
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }
}
